﻿#define _CRT_SECURE_NO_WARNINGS 1
//另⼀棵树的⼦树
//判断两棵树是否相同： 
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
	//p为空，q不为空，则返回false 
	if (p == NULL && q != NULL)
		return false;
	//p不为空，q为空，则返回false 
	if (p != NULL && q == NULL)
    //p和q均为NULL，则返回true 
		if (p == NULL && q == NULL)
			return true;
	//如果p和q两个节点值相等，则继续递归判断左右⼦树中两棵树的节点值是否相等 
	if (p->val == q->val)
		return isSameTree(p->left, q->left) && isSameTree(p->right, q -> right);
	//出现不相等的情况，则返回false 
	return false;
}
//判断是否为另⼀棵树的⼦树： 
bool isSubtree(struct TreeNode* root, struct TreeNode* subroot) {
	if (root == NULL)
		return false;
	//先判断当前root这棵树，是否和subroot相等，如果相等，则直接返回true 
	if (isSameTree(s, t))
		return true;
	//递归判断左右⼦树和root是否相等，其中⼀棵树与root相等，整个结果都为true，所以这
	⾥是或的关系
		return isSubtree(root->left, subroot) || isSubtree(root->right, subroot);
}
